/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package wasolicitudesfiec.logicacontrol.SolicitarAyudantes;

import entidad.Usuario;
import entidad.ayudantias.Solicitudayudantia;
import entidad.ayudantias.Solicitudserayudante;
import entidad.ayudantias.TipoAyudantia;
import entidad.ayudantias.TipoAyudantia.TipoAyudantiaEnum;
import hero.interfaces.BnNodeValue;
import hero.util.HeroException;
import java.rmi.RemoteException;
import java.sql.Date;
import java.util.ArrayList;
import javax.ejb.CreateException;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.naming.NamingException;
import wasolicitudesfiec.Ayudantias.SolicitarAyudantes.ContratacionAyudantes;
import wasolicitudesfiec.SessionBean1;
import wasolicitudesfiec.authentication.AuthenticationPhaseListener;
import wasolicitudesfiec.general.MensajeException;
import wasolicitudesfiec.logicacontrol.CTRL_Base;
import wasolicitudesfiec.logicacontrol.Logica;
import wasolicitudesfiec.registros.Rg_CandidatoAyudante;

/**
 *
 * @author kabad
 */
public class CTRL_ContratacionAyudantes extends CTRL_Base{
private ContratacionAyudantes gui;
private String nombreActividad = "Contratacion Ayudantes";   
    public CTRL_ContratacionAyudantes(ContratacionAyudantes gui, FacesContext facesContext) {
        super(facesContext);
        this.gui = gui;

        String instancia;
        instancia = (String) externalContext.getRequestParameterMap().get("instancia");
         if (instancia != null) {
            externalContext.getSessionMap().put("instancia", instancia);
        }
    }

      public void inicializar() throws MensajeException{
	ArrayList<Rg_CandidatoAyudante> listaRg_CandidatoAyudante = new ArrayList<Rg_CandidatoAyudante>();
	String nombreInstanciaProf;
	Solicitudayudantia solicitudAyudantia;
	TipoAyudantia tipoAyudantia;
         gui.getPanelNavegacion().getLblNavegacion().setText(Logica.modelo_SolicitarAyudantes + " -> "+nombreActividad);
	   
	try {
	    if (!(usrSession != null && prjSession != null)) {
		throw new Exception();
	    }            
	    nombreInstanciaProf = this.getNombreInstanciaProceso();
	    if (nombreInstanciaProf == null) {
		throw new Exception();
	    }
	    prjSession.initProject(nombreInstanciaProf);
	    int idSolicitud = Integer.parseInt((String) prjSession.getProperty("idSolicitudProceso").getTheValue());
	    solicitudAyudantia = logica.getLogAyudantia().leerSolicitudayudantiaNivel3(idSolicitud);

	    tipoAyudantia = logica.leerTipoAyudantia(solicitudAyudantia);
	    // obtener nombre y tipo de ayudnatia
	    String nombreAyudantia="";
	    gui.getLabel3().setText(tipoAyudantia.getNombre());
	    if (tipoAyudantia.getTipo() == TipoAyudantiaEnum.ACADEMICA) {
		nombreAyudantia=solicitudAyudantia.getMateria().getNombre();
		gui.getLabel1().setText(nombreAyudantia);
	    } else {
		nombreAyudantia=solicitudAyudantia.getAyudantiavaria().getNombre();
		gui.getLabel1().setText(nombreAyudantia);
	    }
	    Rg_CandidatoAyudante rg_CandidatoAyudante;

	    for (Solicitudserayudante object : solicitudAyudantia.getListaSolicitudserayudante()) {
		if (object.getRespuestaConfirmacion().equals("Acepto")) {
		    rg_CandidatoAyudante = new Rg_CandidatoAyudante();
		    rg_CandidatoAyudante.setSolicitudserayudante(object);
		    rg_CandidatoAyudante.setSeleccionado(object.getSeleccionado());
		    rg_CandidatoAyudante.setNombreInstancia(solicitudAyudantia.getNombreinstanciaproceso());

		    listaRg_CandidatoAyudante.add(rg_CandidatoAyudante);
		}
	    }
	    gui.getDp_AyudantesContratados().setListaRg_CandidatoAyudante(listaRg_CandidatoAyudante);
	} catch (MensajeException exception) {
	    throw exception;
	} catch (Exception exception) {
	    throw new MensajeException("No es posible iniciar la solicitud. Por favor, intente luego de unos minutos.");
	}
 
    }
    
    public void contratar() throws MensajeException{
	String nombreInstanciaProceso;
	BnNodeValue actividad;
	Solicitudayudantia solicitudAyudantia;
	
	Solicitudayudantia solicitud;
        Solicitudayudantia solicitud2;
	try {
	    if (!(usrSession != null && prjSession != null)) {
		throw new Exception();
	    }
	    nombreInstanciaProceso = getNombreInstanciaProceso();
	    if (nombreInstanciaProceso == null) {
		throw new Exception();
	    }
	    prjSession.initProject(nombreInstanciaProceso);
	    actividad = usrSession.getNode(nombreInstanciaProceso, nombreActividad);
	    if (!(actividad != null && (actividad.getState() == hero.interfaces.Constants.Nd.READY || actividad.getState() == hero.interfaces.Constants.Nd.ANTICIPABLE))) {
		throw new Exception();
	    }
	    
	     int idSolicitud = Integer.parseInt(prjSession.getProperty("idSolicitudProceso").getTheValue());
	    solicitud = logica.getLogAyudantia().leerSolicitudayudantiaNivel3(idSolicitud);
               java.util.Date fechamod = (java.util.Date) new java.util.Date();
            solicitud.setFechamodificacion(new Date(fechamod.getTime()));                      
	    solicitud2 = logica.getLogAyudantia().guardarYClonarSolicitudAyudantia(solicitud);
	    prjSession.setNodeProperty(nombreActividad, "idSolicitudActividad", solicitud2.getIdSolicitudAyudantia() + "");
	    usrSession.startActivity(nombreInstanciaProceso, nombreActividad);
	    usrSession.terminateActivity(nombreInstanciaProceso, nombreActividad);
	   
	    terminarProcesosEstudiantes(solicitud, solicitud2.getIdSolicitudAyudantia() );
	} catch (MensajeException exception) {
	    throw exception;
	} catch (Exception exception) {
	    throw new MensajeException("No es posible iniciar la solicitud. Por favor, intente luego de unos minutos. general");
	}

    }
 private void terminarProcesosEstudiantes(Solicitudayudantia solicitudayudantia, int idSolicitudActividad) throws MensajeException, NamingException, CreateException, RemoteException, RemoteException, HeroException, HeroException, Exception {
	Usuario usuarioConectado;
	SessionBean1 sessionBean1 = (SessionBean1) externalContext.getSessionMap().get("SessionBean1");
	usuarioConectado = (Usuario) externalContext.getSessionMap().get(AuthenticationPhaseListener.USER_SESSION_KEY);
	    logica.autenticaComodin();
	    logica.getLogAyudantia().terminarProcesosSolicitarSerAyudante(solicitudayudantia, idSolicitudActividad);
	    logica.autentica(usuarioConectado.getUsuario(), usuarioConectado.getPassword());	
    }

    public String getNombreInstanciaProceso() {
        String instancia;
        instancia = (String) externalContext.getSessionMap().get("instancia");
        return instancia;
    }

  
}
